//! 动态生成器示例
//! 展示如何使用字段生成器类型来动态生成数据

use dataforge::{
    db::schema::{TableSchema, DataType, FieldGeneratorType},
    filling::MySqlFillerSync,
    filling::ConnectionConfig,
    filling::FillingConfig
};
use std::collections::HashMap;

fn main() -> Result<(), Box<dyn std::error::Error>> {
    // 创建一个示例表结构
    let mut schema = TableSchema::new("users".to_string());
    
    // 添加使用默认生成器的字段
    schema.add_field(
        dataforge::db::schema::FieldSchema::new(
            "id".to_string(), 
            DataType::Integer { min: Some(1), max: Some(1000000) }
        )
    );
    
    // 添加使用特定生成器类型的字段
    schema.add_field(
        dataforge::db::schema::FieldSchema::new(
            "full_name".to_string(), 
            DataType::String { max_length: Some(100) }
        ).with_generator_type(FieldGeneratorType::Name)
    );
    
    schema.add_field(
        dataforge::db::schema::FieldSchema::new(
            "email".to_string(), 
            DataType::Email
        ).with_generator_type(FieldGeneratorType::RandomEmail)
    );
    
    schema.add_field(
        dataforge::db::schema::FieldSchema::new(
            "phone".to_string(), 
            DataType::Phone { country: Some("CN".to_string()) }
        ).with_generator_type(FieldGeneratorType::RandomPhone)
    );
    
    schema.add_field(
        dataforge::db::schema::FieldSchema::new(
            "company".to_string(), 
            DataType::String { max_length: Some(100) }
        ).with_generator_type(FieldGeneratorType::CompanyName)
    );
    
    schema.add_field(
        dataforge::db::schema::FieldSchema::new(
            "created_at".to_string(), 
            DataType::DateTime { format: None }
        ).with_generator_type(FieldGeneratorType::CurrentTimestamp)
    );
    
    // 设置主键
    schema = schema.with_primary_key(vec!["id".to_string()]);
    
    // 打印表结构
    println!("表结构: {:#?}", schema);
    
    // 生成示例数据
    let sample_data = dataforge::filling::generators::GenericDataGenerator::generate_data_by_schema(&schema, 3)?;
    
    println!("\n生成的示例数据:");
    for (i, row) in sample_data.iter().enumerate() {
        println!("记录 {}:", i + 1);
        for (field_name, value) in row {
            println!("  {}: {}", field_name, value);
        }
        println!();
    }
    
    Ok(())
}